const trim = function (string) {
	return (string || "").replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, "");
};
export const on = (function () {
	if (document.addEventListener) {
		return function (element, event, handler) {
			if (element && event && handler) {
				element.addEventListener(event, handler, false);
			}
		};
	} else {
		return function (element, event, handler) {
			if (element && event && handler) {
				element.attachEvent("on" + event, handler);
			}
		};
	}
})();

export const off = (function () {
	if (document.removeEventListener) {
		return function (element, event, handler) {
			if (element && event) {
				element.removeEventListener(event, handler, false);
			}
		};
	} else {
		return function (element, event, handler) {
			if (element && event) {
				element.detachEvent("on" + event, handler);
			}
		};
	}
})();

export function addClass(el, cls) {
	if (!el) return;
	var curClass = el.className;
	var classes = (cls || "").split(" ");

	for (var i = 0, j = classes.length; i < j; i++) {
		var clsName = classes[i];
		if (!clsName) continue;

		if (el.classList) {
			el.classList.add(clsName);
		} else if (!hasClass(el, clsName)) {
			curClass += " " + clsName;
		}
	}
	if (!el.classList) {
		el.className = curClass;
	}
}

export function removeClass(el, cls) {
	if (!el || !cls) return;
	var classes = cls.split(" ");
	var curClass = " " + el.className + " ";

	for (var i = 0, j = classes.length; i < j; i++) {
		var clsName = classes[i];
		if (!clsName) continue;

		if (el.classList) {
			el.classList.remove(clsName);
		} else if (hasClass(el, clsName)) {
			curClass = curClass.replace(" " + clsName + " ", " ");
		}
	}
	if (!el.classList) {
		el.className = trim(curClass);
	}
}

export function hasClass(el, cls) {
	if (!el || !cls) return false;
	if (cls.indexOf(" ") !== -1)
		throw new Error("className should not contain space.");
	if (el.classList) {
		return el.classList.contains(cls);
	} else {
		return (" " + el.className + " ").indexOf(" " + cls + " ") > -1;
	}
}
